package com.nbcio.iot.domain.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.nbcio.common.core.validate.AddGroup;
import com.nbcio.common.core.validate.EditGroup;
import com.nbcio.common.mybatis.core.domain.BaseEntity;
import com.nbcio.iot.domain.vo.IotProductVo;

import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;

/**
 * 物联网产品对象 iot_product
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("iot_product")
@AutoMapper(target = IotProductVo.class, reverseConvertGenerate = false)
public class IotProduct extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 产品ID
     */
    @TableId(value = "product_id")
    private Long productId;

    /**
     * 产品名称
     */
    @NotBlank(message = "产品名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productName;

    /**
     * 产品编码
     */
    @NotBlank(message = "产品编码不能为空", groups = { AddGroup.class, EditGroup.class })
    private String productCode;

    /**
     * 产品分类ID
     */
    @NotNull(message = "产品分类不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long categoryId;

    /**
     * 产品型号
     */
    private String productModel;

    /**
     * 产品品牌
     */
    private String brand;

    /**
     * 产品规格
     */
    private String specification;

    /**
     * 产品图片
     */
    private String productImage;

    /**
     * 产品描述
     */
    private String description;

    /**
     * 技术参数
     */
    private String technicalParams;

    /**
     * 设备类型
     */
    @NotBlank(message = "设备类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String deviceType;

    /**
     * 通信协议类型
     */
    private String protocolType;

    /**
     * 协议配置（JSON）
     */
    @TableField("protocol_config")
    private String protocolConfig;

    /**
     * 绑定的 Node-RED 规则ID（可选）
     */
    @TableField("flow_id")
    private Long flowId;

    /**
     * 数据格式
     */
    private String dataFormat;

    /**
     * 工作电压
     */
    private String workingVoltage;

    /**
     * 工作温度
     */
    private String workingTemperature;

    /**
     * 防护等级
     */
    private String protectionLevel;

    /**
     * 产品价格
     */
    private BigDecimal price;

    /**
     * 供应商
     */
    private String supplier;

    /**
     * 供应商联系方式
     */
    private String supplierContact;

    /**
     * 状态（0正常 1停用）
     */
    private String status;

    /**
     * 删除标志（0代表存在 2代表删除）
     */
    @TableLogic
    private String delFlag;
} 